package com.tdam2011.grupo05.entidades;



import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;




public class DatabaseHelper extends SQLiteOpenHelper {

	public static final String dbName="tdam";
	
	public static final String accionTable="Acciones";
	public static final String colID="AccionID";
	public static final String colTipo="TipoAccion";
	public static final String colContact="Contacto";
	public static final String colFecha="Fecha";
	
	public static final String mensajeTable = "Mensajes";
	public static final String colMensajeID = "MensajeID";
	public static final String colContacto = "Contacto";
	public static final String colMensajeTxt = "Mensaje";
	public static final String colFechaMensaje = "Fecha";
	public static final String colTipoMensaje = "TipoMensaje";
	public static final String colEstadoMensaje = "EstadoMensaje";
	
	public static final String mensajeEntrateTable = "MensajeEntrante";
	public static final String colMensajeEntranteID = "MensajeID";
	public static final String colMensajeEntranteTxt = "Mensaje";
	public static final String colFechaMensajeEntrante = "Fecha";
	public static final String colTipoMensajeEntrate = "TipoMensaje";
	public static final String colEstadoMensajeEntrante = "EstadoMensaje";
	
	
	public static final String contactoTable = "Contactos";
	public static final String colContactoID = "ContactoID";
	public static final String colContactoNombre = "Nombre";
	public static final String colContactoIDapp = "ContactoIDapp";
	public static final String colUsuarioApp = "Usuario";
	
	
	
	/*public static final String telefonoTable = "Telefonos";
	public static final String colTelefonoID = "TelID";
	public static final String colTelefonoNum = "Numero";
	public static final String colTelContacto = "Contacto";
	
	
	public static final String emailTable = "Emails";
	public static final String colEmailID = "EmailID";
	public static final String colEmailAddress = "Direccion";
	public static final String colEmailContacto = "Contacto";*/
	
	
	public static final String cuentaTable = "Cuenta";
	public static final String colCuentaID = "cuentaID";
	public static final String colUsuario = "Usuario";
	public static final String colPassword = "Password";
	
	
	public DatabaseHelper(Context context) {
		super(context, dbName, null,1);
				
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
						
		/*db.execSQL("CREATE TABLE "+accionTable+" ("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
				colTipo+" TEXT, "+colContact+" Integer, "+colFecha+" Integer)");*/
				
		
		db.execSQL("CREATE TABLE "+contactoTable+" ("+colContactoID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
				colContactoNombre+" TEXT, "+colContactoIDapp+" TEXT, "+colUsuarioApp+" TEXT )");
		
		/*db.execSQL("CREATE TABLE "+telefonoTable+" ("+colTelefonoID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
				colTelefonoNum+" TEXT, "+colTelContacto+" INTEGER NOT NULL ,FOREIGN KEY ("+colTelContacto+") REFERENCES "+contactoTable+" ("+colContactoID+"));");
		
		db.execSQL("CREATE TABLE "+emailTable+" ("+colEmailID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
				colEmailAddress+" TEXT, "+colEmailContacto+" INTEGER NOT NULL ,FOREIGN KEY ("+colEmailContacto+") REFERENCES "+contactoTable+" ("+colContactoID+"));");
		*/
		db.execSQL("CREATE TABLE "+mensajeTable+" ("+colMensajeID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
				colMensajeTxt+" TEXT, "+colFechaMensaje+" TEXT, "+colTipoMensaje+" TEXT, "+
				colEstadoMensaje+" INTEGER, " + colContacto+" INTEGER NOT NULL, FOREIGN KEY("+colContacto+") REFERENCES "
				+contactoTable+" ("+colContactoID+"))");
		
		db.execSQL("CREATE TABLE "+mensajeEntrateTable+" ("+colMensajeEntranteID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
				colMensajeEntranteTxt+" TEXT, "+colFechaMensajeEntrante+" TEXT, "+colTipoMensajeEntrate+" TEXT, "+
				colEstadoMensaje+" INTEGER)");
		
		db.execSQL("CREATE TABLE "+ cuentaTable + " ("+colCuentaID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
				colUsuario +" TEXT, "+colPassword + " TEXT)");
				
		db.execSQL("CREATE TRIGGER fk_ContactoMen_ContacID " +
				" BEFORE INSERT "+
				" ON "+mensajeTable+
				
				" FOR EACH ROW BEGIN"+
				" SELECT CASE WHEN ((SELECT "+colContactoID+" FROM "+contactoTable+" WHERE "+colContactoID+"=new."+colContacto+" ) IS NULL)"+
				" THEN RAISE (ABORT,'Foreign Key Violation') END;"+
				"  END;");
	
		/*db.execSQL("CREATE TRIGGER fk_contel_contid " +
				" BEFORE INSERT "+
				" ON "+telefonoTable+
				
				" FOR EACH ROW BEGIN"+
				" SELECT CASE WHEN ((SELECT "+colContactoID+" FROM "+contactoTable+" WHERE "+colContactoID+"=new."+colTelContacto+" ) IS NULL)"+
				" THEN RAISE (ABORT,'Foreign Key Violation') END;"+
				"  END;");
		
		db.execSQL("CREATE TRIGGER fk_contemail_contid " +
				" BEFORE INSERT "+
				" ON "+emailTable+
				
				" FOR EACH ROW BEGIN"+
				" SELECT CASE WHEN ((SELECT "+colContactoID+" FROM "+contactoTable+" WHERE "+colContactoID+"=new."+colEmailContacto+" ) IS NULL)"+
				" THEN RAISE (ABORT,'Foreign Key Violation') END;"+
				"  END;");*/
		
		
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
		db.execSQL("DROP TABLE IF EXISTS " + dbName);
		db.execSQL("DROP TABLE IF EXISTS "+accionTable);
		db.execSQL("DROP TABLE IF EXISTS "+mensajeTable);
		db.execSQL("DROP TABLE IF EXISTS "+mensajeEntrateTable);
		db.execSQL("DROP TABLE IF EXISTS "+contactoTable);
		//db.execSQL("DROP TABLE IF EXISTS "+emailTable);
		//db.execSQL("DROP TABLE IF EXISTS "+telefonoTable);
		db.execSQL("DROP TABLE IF EXISTS "+cuentaTable);
		db.execSQL("DROP TRIGGER IF EXISTS fk_ContactoMen_ContacID");
		onCreate(db);
	}
	
	 /*public void AddAccion(LogAccion acc)
	{
		 		 
		SQLiteDatabase db= this.getWritableDatabase();
		 		
		ContentValues cv=new ContentValues();
		
		cv.put(colTipo, acc.get_tipoLlamada());
		cv.put(colFecha, acc.get_fecha());
		cv.put(colContact, acc.getNombreContacto());
				
		db.insert(accionTable, colTipo, cv);
		db.close();
		
		
	}*/
	
	/*public void AddTelefono(String tel)
	{
		 		 
		SQLiteDatabase db= this.getWritableDatabase();
		 		
		ContentValues cv=new ContentValues();
		
		cv.put(colTipo, acc.get_tipoLlamada());
		cv.put(colFecha, acc.get_fecha());
		cv.put(colContact, acc.getNombreContacto());
				
		db.insert(accionTable, colTipo, cv);
		db.close();
		
		
	}
	
	public void AddEmail(String email)
	{
		 		 
		SQLiteDatabase db= this.getWritableDatabase();
		 		
		ContentValues cv=new ContentValues();
		
		cv.put(colTipo, acc.get_tipoLlamada());
		cv.put(colFecha, acc.get_fecha());
		cv.put(colContact, acc.getNombreContacto());
				
		db.insert(accionTable, colTipo, cv);
		db.close();
		
		
	}*/
	
	
			 
	 public Cursor getAllAcciones()
	 {
		 SQLiteDatabase db=this.getWritableDatabase();
		 	 
		 Cursor cur= db.rawQuery("SELECT * FROM "+accionTable,null);
		 return cur;
		 
	 }
	
	 public int getAccionesCount(){
		 SQLiteDatabase db=this.getWritableDatabase();
			Cursor cur= db.rawQuery("Select * from "+accionTable, null);
			int x= cur.getCount();
			cur.close();
			return x;
	 }

	 public void insertarContacto(Contacto contacto){
		 SQLiteDatabase db = this.getWritableDatabase();
		 ContentValues cv  = new ContentValues();
		 cv.put(colContactoNombre, contacto.getNombre());
		 cv.put(colContactoIDapp, contacto.get_id());
		 cv.put(colUsuarioApp, contacto.getUsuario());
		 db.insert(contactoTable,colContactoNombre , cv);
		 db.close();
	 }
	 
	 public int getContactosCount(){
		 SQLiteDatabase db = this.getWritableDatabase();
		 Cursor cursor = db.rawQuery("Select * from "+contactoTable,null);
		 int count = cursor.getCount();
		 return count;
	 }
	 
	 public Cursor getAllContactos(){
		 SQLiteDatabase db = this.getReadableDatabase();
		 Cursor cursor = db.rawQuery("Select * From "+contactoTable, null);
		 return cursor;
	 }
	 
	 public Contacto getContacto(int appID){
		
		 SQLiteDatabase db = this.getReadableDatabase();
		 
		 String[] params = new String[]{String.valueOf(appID)};
		
		 Cursor cursor = db.rawQuery("SELECT * FROM "+contactoTable + " WHERE "+colContactoIDapp+"=?", params);
		 
		 cursor.moveToNext();
		
		 int colID = cursor.getColumnIndex(colContactoIDapp);
		 int colNombre = cursor.getColumnIndex(colContactoNombre);
		 int colIdWeb = cursor.getColumnIndex(colContactoID);
		 int colUsus = cursor.getColumnIndex(colUsuarioApp);
		 Contacto contacto = new Contacto();
		 contacto.set_id(cursor.getString(colID));
		 contacto.setWeb_id(cursor.getInt(colIdWeb));
		 contacto.setNombre(cursor.getString(colNombre));
		 contacto.setUsuario(cursor.getString(colUsus));

		 
		 cursor.close();
		 
		 return contacto;
		 
	 }
	 
	 public Contacto getContacto(String usuario){
			
		 SQLiteDatabase db = this.getReadableDatabase();
		 
		 String[] params = new String[]{usuario};
		
		 Cursor cursor = db.rawQuery("SELECT * FROM "+contactoTable + " WHERE "+colUsuarioApp+"=?", params);
		 
		 cursor.moveToNext();
		
		 int colID = cursor.getColumnIndex(colContactoIDapp);
		 int colNombre = cursor.getColumnIndex(colContactoNombre);
		 int colIdWeb = cursor.getColumnIndex(colContactoID);
		 int colUsus = cursor.getColumnIndex(colUsuarioApp);
		 Contacto contacto = new Contacto();
		 contacto.set_id(cursor.getString(colID));
		 contacto.setWeb_id(cursor.getInt(colIdWeb));
		 contacto.setNombre(cursor.getString(colNombre));
		 contacto.setUsuario(cursor.getString(colUsus));
		 
		 cursor.close();
		 
		 return contacto;
		 
	 }
	 
	 public void insertMensaje(Mensaje mensaje){
		 SQLiteDatabase db = this.getWritableDatabase();
		
		 ContentValues values = new ContentValues();
		 
		 values.put(colMensajeTxt, mensaje.getMensaje());
		 values.put(colFechaMensaje, mensaje.getFecha());
		 values.put(colTipoMensaje, mensaje.getTipoMensaje());
		 if (mensaje.isEstado()) values.put(colEstadoMensaje, 1);
		 else values.put(colEstadoMensaje, 0);
		 values.put(colContacto, mensaje.getReceptor().getWeb_id());
		 
		 db.insert(mensajeTable, colMensajeTxt, values);
		 db.close();
	 }
	 
	 public void insertMensajeEntrante(Mensaje mensaje){
		 SQLiteDatabase db = this.getWritableDatabase();
		
		 ContentValues values = new ContentValues();
		 
		 values.put(colMensajeEntranteTxt, mensaje.getMensaje());
		 values.put(colFechaMensajeEntrante, mensaje.getFecha());
		 values.put(colTipoMensajeEntrate, mensaje.getTipoMensaje());
		 if (mensaje.isEstado()) values.put(colEstadoMensajeEntrante, 1);
		 else values.put(colEstadoMensajeEntrante, 0);
		 db.insert(mensajeTable, colMensajeTxt, values);
		 db.close();
	 }
	 
	 public Cursor getMensajesPorContacto (Contacto contacto){
		 SQLiteDatabase db = this.getReadableDatabase();
		 Cursor cursor = db.query(mensajeTable, new String[]{"_id",colMensajeTxt,colFechaMensaje}, 
				 colContacto+"=?", new String[]{Integer.toString(contacto.getWeb_id())}, null, null, null);
		 return cursor;
		 
		 
	 }
	 
	 public void insertCuenta(String usuario, String password){
		 SQLiteDatabase db = this.getWritableDatabase();
		 ContentValues values = new ContentValues();
		 values.put(colUsuario, usuario);
		 values.put(colPassword, password);
		 db.insert(cuentaTable, colUsuario, values);
		 db.close();
	 }
	
	 
	 
	 public Cursor getDatosCuenta(){
		 SQLiteDatabase db = this.getReadableDatabase();
		 Cursor cursor = db.rawQuery("Select * from "+cuentaTable, null);
		 return cursor;
	 }
	 

}
